From 35a41bd801bf121c2f0b7bc0287b7844daa3facb Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Wed, 20 Oct 2010 13:26:27 +0200 Subject: [PATCH] Make loading of theming engines from modules work --- gtk/gtkthemingengine.c | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/gtk/gtkthemingengine.c b/gtk/gtkthemingengine.c index 0f035c0979..99518f8fb5 100644 --- a/gtk/gtkthemingengine.c +++ b/gtk/gtkthemingengine.c @@ -154,8 +154,11 @@ typedef struct GtkThemingModuleClass GtkThemingModuleClass; struct GtkThemingModule { GTypeModule parent_instance; + GModule *module; gchar *name; + void (*init) (GTypeModule *module); + void (*exit) (void); GtkThemingEngine * (*create_engine) (void); }; @@ -622,26 +625,50 @@ gtk_theming_module_load (GTypeModule *type_module) return FALSE; } - if (!g_module_symbol (module, "create_engine", + if (!g_module_symbol (module, "theme_init", + (gpointer *) &theming_module->init) || + !g_module_symbol (module, "theme_exit", + (gpointer *) &theming_module->exit) || + !g_module_symbol (module, "create_engine", (gpointer *) &theming_module->create_engine)) { - g_warning ("%s", g_module_error()); + g_warning ("%s", g_module_error ()); g_module_close (module); return FALSE; } - g_module_make_resident (module); + theming_module->module = module; + + theming_module->init (theming_module); return TRUE; } +static void +gtk_theming_module_unload (GTypeModule *type_module) +{ + GtkThemingModule *theming_module; + + theming_module = GTK_THEMING_MODULE (type_module); + + theming_module->exit (); + + g_module_close (theming_module->module); + + theming_module->module = NULL; + theming_module->init = NULL; + theming_module->exit = NULL; + theming_module->create_engine = NULL; +} + static void gtk_theming_module_class_init (GtkThemingModuleClass *klass) { GTypeModuleClass *module_class = G_TYPE_MODULE_CLASS (klass); module_class->load = gtk_theming_module_load; + module_class->unload = gtk_theming_module_unload; } static void -- 2.30.2